package com.wpp;

import org.junit.Test;

/**
 * String,StringBuffer,StringBuilder三者的异同
 * String:不可变的字符序列,底层都是char[]存储
 * StringBuffer:可变的字符序列,线程安全的，效率低。底层都是char[]存储
 * StringBuilder:可变的字符序列；jdk5新增的，线程不安全的，效率高；底层都是char[]存储
 * <p>
 * <p>
 * 源码分析：
 * StringBuffer s3 = new StringBuffer();//底层创建了一个长度是16的数组
 * public StringBuffer() {
 * super(16);//底层创建了一个长度是16的数组
 * }
 * StringBuffer s3 = new StringBuffer("1b3");//解析为char[] char = new char[s3.length() + 16]
 * 默认扩容为原来容量的2倍加2，同时将原来的数组中的元素复制到新的数组中
 * 建议：为了避免append次数过多，以及频繁扩容造成资源浪费，建议使用指定容量的StringBuffer(int capacity);
 */
public class StringBufferBuilderTest {


    @Test
    public void test1() {

        String s1 = "df";
        StringBuffer s3 = new StringBuffer("1b3");
        System.out.println(s3.length());
        s3.setCharAt(0, 'a');
        s3.append("299999999999999999999993");//可变
        System.out.println(s3);

        StringBuffer s4 = new StringBuffer(13);
        System.out.println(s4.length());//结果0

        s4.append("zbcd");
        s4.delete(1, 2);
        System.out.println(s4);//结果zcd,左闭右开
        s4.reverse();
        System.out.println(s4);//反转

        StringBuilder stringBuilder = new StringBuilder();
    }

}
